/**
 * 文件工具函数
 * 处理文件相关的格式化和计算功能
 */

/**
 * 格式化文件大小
 * @param {number|string} size - 文件大小（字节）
 * @returns {string} 格式化后的文件大小字符串
 */
export const formatFileSize = (size) => {
  // 处理字符串类型的size值
  const numSize = typeof size === 'string' ? parseInt(size, 10) : size;
  
  if (!numSize || numSize < 0) return '0 B';
  
  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
  let unitIndex = 0;
  let currentSize = numSize;
  
  while (currentSize >= 1024 && unitIndex < units.length - 1) {
    currentSize /= 1024;
    unitIndex++;
  }
  
  // 根据大小决定保留的小数位数
  if (unitIndex === 0) {
    return `${Math.floor(currentSize)} ${units[unitIndex]}`;
  } else {
    return `${currentSize.toFixed(2)} ${units[unitIndex]}`;
  }
};

/**
 * 格式化日期时间
 * @param {string|Date} dateStr - 日期字符串或Date对象
 * @returns {string} 格式化后的日期时间字符串
 */
export const formatDateTime = (dateStr) => {
  if (!dateStr) return '';
  
  const date = typeof dateStr === 'string' ? new Date(dateStr) : dateStr;
  
  // 检查日期是否有效
  if (isNaN(date.getTime())) return '';
  
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  const seconds = String(date.getSeconds()).padStart(2, '0');
  
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};

/**
 * 获取文件图标类型
 * @param {string} filetype - 文件类型标识符
 * @returns {string} 图标类型名称
 */
export const getFileIconType = (filetype) => {
  // 确保filetype是字符串
  const typeStr = String(filetype);
  
  const iconMap = {
    '0': 'folder',     // 文件夹
    '2': 'image',      // 图片
    '3': 'document',   // 文档(Word/Excel/PPT/PDF等)
    '4': 'audio',      // 音频
    '5': 'document',   // 其他文档类型
    '6': 'shared',     // 共享文件夹/隐藏目录
    '7': 'video'       // 视频
  };
  
  return iconMap[typeStr] || 'unknown';
};

/**
 * 判断是否为图片文件
 * @param {string|number} filetype - 文件类型标识符
 * @returns {boolean} 是否为图片文件
 */
export const isImageFile = (filetype) => {
  return String(filetype) === '2';
};

/**
 * 判断是否为视频文件
 * @param {string|number} filetype - 文件类型标识符
 * @returns {boolean} 是否为视频文件
 */
export const isVideoFile = (filetype) => {
  return String(filetype) === '7';
};

/**
 * 判断是否为音频文件
 * @param {string|number} filetype - 文件类型标识符
 * @returns {boolean} 是否为音频文件
 */
export const isAudioFile = (filetype) => {
  return String(filetype) === '4';
};

/**
 * 判断是否为文档文件
 * @param {string|number} filetype - 文件类型标识符
 * @returns {boolean} 是否为文档文件
 */
export const isDocumentFile = (filetype) => {
  const typeStr = String(filetype);
  return typeStr === '3' || typeStr === '5';
};

/**
 * 判断是否为文件夹
 * @param {string|number} filetype - 文件类型标识符
 * @returns {boolean} 是否为文件夹
 */
export const isFolder = (filetype) => {
  const typeStr = String(filetype);
  return typeStr === '0' || typeStr === '6';
};

/**
 * 计算空间使用百分比
 * @param {number|string} used - 已使用空间（字节）
 * @param {number|string} total - 总空间（字节）
 * @returns {number} 使用百分比
 */
export const calculateSpacePercent = (used, total) => {
  const numUsed = typeof used === 'string' ? parseInt(used, 10) : used;
  const numTotal = typeof total === 'string' ? parseInt(total, 10) : total;
  
  if (!numTotal || numTotal <= 0) return 0;
  
  const percent = (numUsed / numTotal) * 100;
  return Math.min(Math.max(percent, 0), 100);
};

/**
 * 获取文件类型显示名称
 * @param {string|number} filetype - 文件类型标识符
 * @returns {string} 类型显示名称
 */
export const getFileTypeLabel = (filetype) => {
  const typeStr = String(filetype);
  
  const typeMap = {
    '0': '文件夹',
    '2': '图片',
    '3': '文档',
    '4': '音频',
    '5': '其他',
    '6': '共享文件夹',
    '7': '视频'
  };
  
  return typeMap[typeStr] || '未知';
};

/**
 * 获取文件图标样式类名
 * @param {Object} file - 文件对象
 * @returns {string} 图标类名
 */
export const getFileIconClass = (file) => {
  // 这里根据项目使用的图标库来返回相应的类名
  // 示例使用Element Plus图标
  const filetype = file.filetype;
  
  if (isFolder(filetype)) {
    return 'el-icon-folder';
  } else if (isImageFile(filetype)) {
    return 'el-icon-picture';
  } else if (isVideoFile(filetype)) {
    return 'el-icon-video-camera';
  } else if (isAudioFile(filetype)) {
    return 'el-icon-microphone';
  } else if (isDocumentFile(filetype)) {
    return 'el-icon-document';
  } else {
    return 'el-icon-question';
  }
};

/**
 * 生成唯一ID
 * @returns {string} 唯一ID字符串
 */
export const generateUniqueId = () => {
  return Date.now().toString(36) + Math.random().toString(36).substr(2);
};

/**
 * 截断长文件名
 * @param {string} filename - 文件名
 * @param {number} maxLength - 最大长度
 * @returns {string} 截断后的文件名
 */
export const truncateFilename = (filename, maxLength = 20) => {
  if (!filename || filename.length <= maxLength) return filename;
  
  const extensionIndex = filename.lastIndexOf('.');
  if (extensionIndex === -1) {
    return filename.substring(0, maxLength - 3) + '...';
  }
  
  const name = filename.substring(0, extensionIndex);
  const extension = filename.substring(extensionIndex);
  
  if (name.length <= maxLength - 3) {
    return filename;
  }
  
  return name.substring(0, maxLength - extension.length - 3) + '...' + extension;
};

/**
 * 获取文件扩展名
 * @param {string} filename - 文件名
 * @returns {string} 文件扩展名（不含点）
 */
export const getFileExtension = (filename) => {
  if (!filename) return '';
  const parts = filename.split('.');
  return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : '';
};